//============================================================================================
/**
 * @file	phclink_senddemo.c
 * @brief	ＰＨＣ−ＤＳ接続画面 送信デモ画面 【シーケンス】
 * @author	Akito Mori
 * @date	09.02.02
 */
//============================================================================================
#include "common.h"
#include "gflib/touchpanel.h"
#include "system/gamedata.h"
#include "system/procsys.h"
#include "system/main.h"
#include "system/fontproc.h"
#include "system/window.h"
#include "system/pmfprint.h"
#include "system/snd_tool.h"
#include "system/arc_tool.h"
#include "system/arc_util.h"
#include "system/clact_tool.h"
#include "system/clact_util.h"
#include "system/msgdata.h"
#include "system/wordset.h"
#include "system/mystatus.h"
#include "system/wipe.h"
#include "savedata/config.h"
#include "itemtool/item.h"
#include "itemtool/myitem.h"
#include "msgdata/msg.naix"
#include "msgdata/msg_phc_com.h"
#include "poketool/boxdata.h"

#include "application/phclink.h"
#include "phclink_obj_def.h"
#include "phclink_bmp_def.h"
#include "phclink_local.h"
#include "phclink_obj.h"
#include "phclink_bmp.h"
#include "phc_ds.naix"

enum{
	SUBSEQ_SAVE_MSG=0,		///< 通常送信「レポートをかいています」
	SUBSEQ_SAVE_MSG_WAIT,	///< メッセージ待ち
	SUBSEQ_SAVE_START,		///< セーブ開始
	SUBSEQ_SAVE_WAIT,		///< セーブ待ち
	SUBSEQ_SAVE_END,		///< セーブ終了

	SUBSEQ_FIRST_SEND_MSG,		///< 初回送信「レポートをかいて…」
	SUBSEQ_FIRST_SEND_MSG_WAIT,	///< メッセージ待ち

	SUBSEQ_END,					///< 終了
	SUBSEQ_MAX,
};

static int SubSeqSaveMsg( PHCLINK_WORK *wk );
static int SubSeqSaveMsgWait( PHCLINK_WORK *wk );
static int SubSeqSaveStart( PHCLINK_WORK *wk );
static int SubSeqSaveWait( PHCLINK_WORK *wk );
static int SubSeqSaveEnd( PHCLINK_WORK *wk );
static int SubSeqEnd( PHCLINK_WORK *wk );

static int SubSeqFirstSendMsg( PHCLINK_WORK *wk );
static int SubSeqFirstSendMsgWait( PHCLINK_WORK *wk );


static int (*SubSeqFuncTbl[])( PHCLINK_WORK *wk )={
	SubSeqSaveMsg,
	SubSeqSaveMsgWait,
	SubSeqSaveStart,
	SubSeqSaveWait,
	SubSeqSaveEnd,

	SubSeqFirstSendMsg,
	SubSeqFirstSendMsgWait,

	SubSeqEnd,
};


//==============================================================================
/**
 * @brief   ＰＨＣに預けたあとの処理
 *
 * @param   wk	PHC画面ワーク
 *
 * @retval  アプリシーケンス
 */
//==============================================================================
int PhcLink_SeqSendDemo_Init( PHCLINK_WORK *wk )
{
	int boxNo, boxPos;
	BOX_DATA *boxdata = SaveData_GetBoxData( wk->savedata );
	POKEMON_PASO_PARAM *ppp;

	OS_Printf("PhcLink_SeqSendDemo_Init\n");

	boxNo  = wk->phcsel.SelectResult[0].BoxIdx;
	boxPos = wk->phcsel.SelectResult[0].BoxPos;

	// PHCに預けた情報を書き込み
	PhcSvData_SetDepositInfo( wk->phc_svdata, PHC_DEPOSIT , boxNo );

	// 選択したコースを保存
	PhcSvData_SettLastCourse(wk->phc_svdata, wk->phcsel.course);

	// ボックス内のポケモンをPHC用セーブデータに隠す
	ppp = BOXDAT_GetPokeDataAddress( boxdata, boxNo, boxPos );
	PhcSvData_SetPokemon( wk->phc_svdata, (u8*)ppp );
	BOXDAT_ClearPokemon( boxdata, boxNo, boxPos );

	// PHCから通信でもらった情報にポケモン・アイテム捕獲情報がある場合は格納
	PhcLink_GetPokeItemFunc(wk);

	return SEQ_MAINSEQ_MAIN;
}

//==============================================================================
/**
 * @brief   預けるデモ画面メイン
 *
 * @param   wk	PHC画面ワーク
 *
 * @retval  アプリシーケンス
 */
//==============================================================================
int PhcLink_SeqSendDemo_Main( PHCLINK_WORK *wk )
{

	wk->subseq = SubSeqFuncTbl[wk->subseq]( wk );
	if(wk->subseq == SUBSEQ_MAX){
		wk->subseq  = 0;
		return SEQ_MAINSEQ_END;
	}
	return SEQ_MAINSEQ_MAIN;
}
//==============================================================================
/**
 * @brief   預けるデモ画面終了
 *
 * @param   wk	PHC画面ワーク
 *
 * @retval  アプリシーケンス
 */
//==============================================================================
int PhcLink_SeqSendDemo_End( PHCLINK_WORK *wk )
{
	OS_Printf("PhcLink_SeqSendDemo_End\n");

	return SEQ_MAINSEQ_INIT;
}



//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================
//==============================================================================



//------------------------------------------------------------------
/**
 * @brief   送信処理シーケンス開始「パソコンからポケモン選んで」
 *
 * @param   wk	PHC画面ワーク
 *
 * @retval  サブシーケンス
 */
//------------------------------------------------------------------
static int SubSeqSaveMsg( PHCLINK_WORK *wk )
{
	// 「レポートにかきこんでいますでんげんをきらないでください」
	wk->MsgIndex = PhcLinkBmp_TalkWinPrint( wk, PL_BMP_B_TALK, phc_ds_msg_14 );
	PhcLinkObj_PhcAppear( wk, 0 );
	return SUBSEQ_SAVE_MSG_WAIT;
}


//------------------------------------------------------------------
/**
 * @brief   メッセージ表示待ち
 *
 * @param   wk	PHC画面ワーク
 *
 * @retval  サブシーケンス
 */
//------------------------------------------------------------------
static int SubSeqSaveMsgWait( PHCLINK_WORK *wk )
{
	if(GF_MSG_PrintEndCheck( wk->MsgIndex )==0){

		PhcLinkBmp_TimeWaitIconPut( wk );
//	    rsw->TimeWaitIconPtr = TimeWaitIconAdd( &rsw->TalkWinBmp , TALK_WINDOW_CGX);
#ifdef PHC_NO_SAVE
		return SUBSEQ_SAVE_WAIT;
#else
		return SUBSEQ_SAVE_START;
#endif
	}
	return SUBSEQ_SAVE_MSG_WAIT;
}

//------------------------------------------------------------------

//------------------------------------------------------------------
/**
 * @brief   セーブ開始
 *
 * @param   wk	PHC画面ワーク
 *
 * @retval  サブシーケンス
 */
//------------------------------------------------------------------
static int SubSeqSaveStart( PHCLINK_WORK *wk )
{
	SaveData_Save( wk->savedata );
	SaveData_ResetLoadResult(wk->savedata);

	return SUBSEQ_SAVE_WAIT;
}


//------------------------------------------------------------------
/**
 * @brief   セーブ終了待ち（待ちアイコン消去）
 *
 * @param   wk	PHC画面ワーク
 *
 * @retval  サブシーケンス
 */
//------------------------------------------------------------------
static int SubSeqSaveWait( PHCLINK_WORK *wk )
{
	PhcLinkBmp_TimeWaitIconDel( wk );
	return SUBSEQ_SAVE_END;

}
//------------------------------------------------------------------
/**
 * @brief   セーブ処理終了
 *
 * @param   wk	PHC画面ワーク
 *
 * @retval  サブシーケンス
 */
//------------------------------------------------------------------
static int SubSeqSaveEnd( PHCLINK_WORK *wk )
{

	// ＰＨＣへの初回登録だったら
	if(PhcSvData_GetPhcDepositNum(wk->phc_svdata)==1){
		// 登録告知メッセージへ
		return SUBSEQ_FIRST_SEND_MSG;
	}

	// ポケモン送信セーブ画面だとしても報酬画面へ
	// 捕獲ポケモン画面からスタート
	wk->mainseq_next = MAINSEQ_BENEFIT;
	wk->subseq_flag = SENDRECV_RECV_ONLY_POKEMON;


	return SUBSEQ_END;

}


//------------------------------------------------------------------
/**
 * @brief   「はじめてのとうろくをしゅうりょうしました！」表示
 *
 * @param   wk	PHC画面ワーク
 *
 * @retval  サブシーケンス
 */
//------------------------------------------------------------------
static int SubSeqFirstSendMsg( PHCLINK_WORK *wk )
{
	wk->MsgIndex = PhcLinkBmp_TalkWinPrint( wk, PL_BMP_B_TALK, phc_com_msg_02_1 );

	return SUBSEQ_FIRST_SEND_MSG_WAIT;
}

//------------------------------------------------------------------
/**
 * @brief   「はじめての〜」表示待ち
 *
 * @param   wk	PHC画面ワーク
 *
 * @retval  サブシーケンス
 */
//------------------------------------------------------------------
static int SubSeqFirstSendMsgWait( PHCLINK_WORK *wk )
{
	if(GF_MSG_PrintEndCheck( wk->MsgIndex )==0 ){
		wk->mainseq_next = MAINSEQ_END_PHC;
		return SUBSEQ_END;

	}

	return SUBSEQ_FIRST_SEND_MSG_WAIT;
}

//------------------------------------------------------------------
/**
 * @brief   送信デモアプリ終了
 *
 * @param   wk	PHC画面ワーク
 *
 * @retval  サブシーケンス
 */
//------------------------------------------------------------------
static int SubSeqEnd( PHCLINK_WORK *wk )
{
	GF_BGL_ScrFill(	wk->bgl, GF_BGL_FRAME1_M, 0x0000, 0, 0, 32, 24, GF_BGL_SCRWRT_PALNL );
	GF_BGL_LoadScreenReq( wk->bgl, GF_BGL_FRAME1_M );

	return SUBSEQ_MAX;

}